home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / Windows / Interfaces / QD3DIO.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-03  |  21.6 KB  |  742 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                              **
  3.  **     Module:        QD3DIO.h                                                 **                        
  4.  **                                                                              **
  5.  **                                                                              **
  6.  **     Purpose:    QuickDraw 3D IO API                                         **            
  7.  **                                                                              **
  8.  **                                                                              **
  9.  **                                                                              **
  10.  **     Copyright (C) 1992-1995 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                              **
  12.  *****************************************************************************/
  13. #ifndef QD3DIO_h
  14. #define QD3DIO_h
  15.  
  16. #if PRAGMA_ONCE
  17.     #pragma once
  18. #endif
  19.  
  20. #include "QD3DDrawContext.h"
  21. #include "QD3DView.h"
  22.  
  23. #if defined(THINK_C) || defined(__SC__)
  24.     #pragma options(!pack_enums, !align_arrays)
  25.     #pragma SC options align=power
  26. #elif defined(__MWERKS__)
  27.     #pragma enumsalwaysint on
  28.     #pragma align_array_members off
  29.     #pragma options align=native
  30. #elif defined(__PPCC__)
  31.     #pragma options align=power
  32. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  33.     #pragma options enum=int
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif  /* __cplusplus */
  39.  
  40. /******************************************************************************
  41.  **                                                                              **
  42.  **                                    Basic Types                                 **                                                    
  43.  **                                                                              **
  44.  *****************************************************************************/
  45.  
  46. typedef unsigned char    TQ3Uns8;    /* 1 byte unsigned integer                 */ 
  47. typedef signed   char    TQ3Int8;    /* 1 byte signed integer                 */ 
  48. typedef unsigned short    TQ3Uns16;    /* 2 byte unsigned integer                 */ 
  49. typedef signed   short    TQ3Int16;    /* 2 byte signed integer                 */ 
  50. typedef unsigned long    TQ3Uns32;    /* 4 byte unsigned integer                 */
  51. typedef signed   long    TQ3Int32;    /* 4 byte signed integer                 */
  52.  
  53. typedef struct TQ3Uns64 {
  54. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  55.     unsigned long    hi;
  56.     unsigned long     lo;
  57. #else
  58.     unsigned long     lo;
  59.     unsigned long    hi;
  60. #endif /* OS_MACINTOSH */
  61. } TQ3Uns64;                            /* 8 byte unsigned integer                 */
  62.  
  63. typedef struct TQ3Int64 { 
  64. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  65.     signed long        hi; 
  66.     unsigned long    lo; 
  67. #else
  68.     unsigned long    lo; 
  69.     signed long        hi; 
  70. #endif /* OS_MACINTOSH */
  71. } TQ3Int64;                            /* 8 byte signed integer                 */
  72.  
  73. typedef float            TQ3Float32;    /* 4 byte floating point number             */
  74. typedef double            TQ3Float64;    /* 8 byte floating point number             */
  75.  
  76. typedef TQ3Uns32        TQ3Size;
  77.  
  78. /******************************************************************************
  79.  **                                                                              **
  80.  **                                    File Types                                 **
  81.  **                                                                              **
  82.  *****************************************************************************/
  83.  
  84. typedef enum TQ3FileModeMasks {
  85.     kQ3FileModeNormal        = 0,
  86.     kQ3FileModeStream        = 1 << 0,
  87.     kQ3FileModeDatabase        = 1 << 1,
  88.     kQ3FileModeText            = 1 << 2
  89. } TQ3FileModeMasks;
  90.  
  91. typedef unsigned long TQ3FileMode;
  92.  
  93. /******************************************************************************
  94.  **                                                                              **
  95.  **                                    Method Types                             **
  96.  **                                                                              **
  97.  *****************************************************************************/
  98.  
  99. /*
  100.  *    IO Methods
  101.  *
  102.  *    The IO system treats all objects as groups of typed information.
  103.  *    When you register your element or attribute, the "elementType" is the 
  104.  *    binary type of your object, the "elementName" the ascii type.
  105.  *    
  106.  *    All objects in the metafile are made up of a "root" or parent object which
  107.  *    defines the instantiated object type. You may define the format of your 
  108.  *    data any way you wish as long as you use the primitives types above and the
  109.  *    routines below.
  110.  *
  111.  *    Root Objects are often appended with additional child objects, called 
  112.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  113.  *    
  114.  *    Writing is straightforward: an object traverses itself any other objects 
  115.  *    that make it up, then writes its own data. Writing uses two methods: 
  116.  *    TQ3ObjectTraverseMethod and TQ3ObjectWriteMethod.
  117.  *
  118.  *    The TQ3ObjectTraverseMethod method should:
  119.  *    + First, Determine if the data should be written 
  120.  *        - if you don't want to write out your object after examining your
  121.  *            data, return kQ3Success in your Traverse method without calling
  122.  *            any other submit calls.
  123.  *     + Next, calculate the size of your object on disk
  124.  *     + Gather whatever state from the view you need to preserve
  125.  *         - you may access the view state NOW, as the state of the
  126.  *             view duing your TQ3ObjectWriteMethod will not be valid. You may
  127.  *             pass a temporary buffer to your write method.
  128.  *     + Submit your view write data using Q3View_SubmitWriteData
  129.  *         - note that you MUST call this before any other "_Submit" call.
  130.  *         - you may pass in a "deleteMethod" for your data. This method
  131.  *             will be called whether or not your write method succeeds or fails.
  132.  *     + Submit your subobjects to the view
  133.  *     
  134.  *     The TQ3ObjectWriteMethod method should:
  135.  *     + Write your data format to the file using the primitives routines below.
  136.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  137.  *             method will be called upon exit of your write method.
  138.  *
  139.  *    Reading is less straightforward because your root object and
  140.  *    any subobjects must be read inside of your TQ3ObjectReadDataMethod. There 
  141.  *    is an implicit state contained in the file while reading, which you must 
  142.  *    be aware of. When you first enter the read method, you must physically 
  143.  *    read in your data format using the primitives routines until
  144.  *    
  145.  *    Q3File_IsEndOfData(file) == kQ3True
  146.  *    
  147.  *    Generally, your data format should be self-descriptive such that you do not
  148.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  149.  *    However, this call is useful for determining zero-sized object or 
  150.  *    determining the end of an object's data.
  151.  *    
  152.  *    Once you have read in all the data, you may collect subobjects. A metafile
  153.  *    object ONLY has subobjects if it is in a container. The call
  154.  *    
  155.  *    Q3File_IsEndOfContainer(file)
  156.  *    
  157.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  158.  *    exist.
  159.  *    
  160.  *    At this point, you may use
  161.  *    
  162.  *    Q3File_GetNextObjectType
  163.  *    Q3File_IsNextObjectOfType
  164.  *    Q3File_ReadObject
  165.  *    Q3File_SkipObject
  166.  *    
  167.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  168.  *    is kQ3True.
  169.  * 
  170.  */
  171.  
  172. /*
  173.  *    TQ3ObjectTraverseMethod
  174.  *
  175.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  176.  *    object. Sorry, custom objects will be available in the next major revision.
  177.  *
  178.  *    The "data" is a pointer to your internal element data.
  179.  *
  180.  *    The view is the current traversal view.
  181.  */
  182.  
  183. typedef TQ3Status (*TQ3ObjectTraverseMethod)(
  184.     TQ3Object            object,
  185.     void                *data,
  186.     TQ3ViewObject        view);
  187.  
  188. typedef TQ3Status (*TQ3ObjectWriteMethod)(
  189.     const void            *object,
  190.     TQ3FileObject        file);
  191.  
  192. /*
  193.  *    TQ3ObjectReadDataMethod
  194.  *
  195.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  196.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  197.  *
  198.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  199.  */
  200.  
  201. typedef TQ3Status (*TQ3ObjectReadDataMethod)(
  202.     TQ3Object            parentObject,
  203.     TQ3FileObject        file);
  204.  
  205. #define Q3FileVersion(majorVersion, minorVersion)    (TQ3FileVersion) \
  206.     ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF))
  207.  
  208. typedef unsigned long            TQ3FileVersion;
  209. #define kQ3FileVersionCurrent    Q3FileVersion(1,0)
  210.  
  211. /******************************************************************************
  212.  **                                                                              **
  213.  **                                String Constants                             **
  214.  **                                                                              **
  215.  *****************************************************************************/
  216.  
  217. #define kQ3StringMaximumLength            1024
  218.  
  219. /******************************************************************************
  220.  **                                                                              **
  221.  **                                File Routines                                 **
  222.  **                                                                              **
  223.  *****************************************************************************/
  224. /*
  225.  * Creation and accessors
  226.  */
  227. QD3D_EXPORT TQ3FileObject Q3File_New(
  228.     void);
  229.  
  230. QD3D_EXPORT TQ3Status Q3File_GetStorage(
  231.     TQ3FileObject        file,
  232.     TQ3StorageObject    *storage);
  233.  
  234. QD3D_EXPORT TQ3Status Q3File_SetStorage(
  235.     TQ3FileObject        file,
  236.     TQ3StorageObject    storage);
  237.  
  238. /*
  239.  * Opening, and accessing "open" state, closing/cancelling
  240.  */
  241. QD3D_EXPORT TQ3Status Q3File_OpenRead(
  242.     TQ3FileObject        file,
  243.     TQ3FileMode            *mode);
  244.  
  245. QD3D_EXPORT TQ3Status Q3File_OpenWrite(
  246.     TQ3FileObject        file,
  247.     TQ3FileMode            mode);
  248.  
  249. QD3D_EXPORT TQ3Status Q3File_IsOpen(
  250.     TQ3FileObject        file,
  251.     TQ3Boolean            *isOpen);
  252.  
  253. QD3D_EXPORT TQ3Status Q3File_GetMode(
  254.     TQ3FileObject        file,
  255.     TQ3FileMode            *mode);
  256.  
  257. QD3D_EXPORT TQ3Status Q3File_GetVersion(
  258.     TQ3FileObject        file,
  259.     TQ3FileVersion        *version);
  260.  
  261. QD3D_EXPORT TQ3Status Q3File_Close(
  262.     TQ3FileObject        file);
  263.  
  264. QD3D_EXPORT TQ3Status Q3File_Cancel(
  265.     TQ3FileObject        file);
  266.  
  267. /*
  268.  * Writing (Application)
  269.  */
  270. QD3D_EXPORT TQ3Status Q3View_StartWriting(
  271.     TQ3ViewObject         view,
  272.     TQ3FileObject        file);
  273.  
  274. QD3D_EXPORT TQ3ViewStatus Q3View_EndWriting(
  275.     TQ3ViewObject         view);
  276.  
  277. /*
  278.  * Reading (Application)
  279.  */
  280. QD3D_EXPORT TQ3ObjectType Q3File_GetNextObjectType(
  281.     TQ3FileObject        file);
  282.  
  283. QD3D_EXPORT TQ3Boolean Q3File_IsNextObjectOfType(
  284.     TQ3FileObject        file,
  285.     TQ3ObjectType        ofType);
  286.  
  287. QD3D_EXPORT TQ3Object Q3File_ReadObject(
  288.     TQ3FileObject        file);
  289.  
  290. QD3D_EXPORT TQ3Status Q3File_SkipObject(
  291.     TQ3FileObject        file);
  292.  
  293. QD3D_EXPORT TQ3Boolean Q3File_IsEndOfData(
  294.     TQ3FileObject        file);
  295.  
  296. QD3D_EXPORT TQ3Boolean Q3File_IsEndOfContainer(
  297.     TQ3FileObject        file,
  298.     TQ3Object            rootObject);
  299.  
  300. QD3D_EXPORT TQ3Boolean Q3File_IsEndOfFile(
  301.     TQ3FileObject        file);
  302.  
  303. /*    External file references
  304. */    
  305. QD3D_EXPORT TQ3Status Q3File_SetExternalReference(
  306.     TQ3FileObject        file,
  307.     TQ3SharedObject        sharedObject);
  308.  
  309. QD3D_EXPORT void Q3Shared_SetExternalReference(
  310.                 TQ3SharedObject        sharedObject,
  311.                 TQ3ReferenceObject    extReferenceObj);
  312.                 
  313. QD3D_EXPORT TQ3ReferenceObject Q3Shared_GetExternalReference(
  314.         TQ3SharedObject            sharedObject);
  315.  
  316. QD3D_EXPORT TQ3ReferenceObject Q3ExternalReference_New(
  317.     unsigned long            refID,
  318.     TQ3StringObject            extFileString,
  319.     TQ3FileObject            file);
  320.     
  321. QD3D_EXPORT TQ3Status Q3ExternalReference_SetFileName(
  322.     TQ3ReferenceObject        extReference,
  323.     TQ3StringObject            cString);
  324.     
  325.  
  326. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  327.  
  328. QD3D_EXPORT TQ3Object Q3File_ReadBeginGroup(
  329.     TQ3FileObject        file);
  330.  
  331. QD3D_EXPORT TQ3Status Q3File_AddIncludeFilter(
  332.     TQ3FileObject        file,
  333.     TQ3ObjectType        includeType);
  334.  
  335. QD3D_EXPORT TQ3Status Q3File_AddExcludeFilter(
  336.     TQ3FileObject        file,
  337.     TQ3ObjectType        excludeType);
  338.  
  339. QD3D_EXPORT TQ3Status Q3File_ClearFilters(
  340.     TQ3FileObject        file);
  341.  
  342. #endif  /*  ESCHER_VER_15  */
  343.  
  344. /*
  345.  * Idling
  346.  */
  347. typedef TQ3Status (*TQ3FileIdleMethod)(
  348.     TQ3FileObject        file,
  349.     const void            *idlerData);
  350.  
  351. QD3D_EXPORT TQ3Status Q3File_SetIdleMethod(
  352.     TQ3FileObject        file,
  353.     TQ3FileIdleMethod    idle,
  354.     const void            *idleData);
  355.  
  356. typedef void (*TQ3DataDeleteMethod)(
  357.     void                *data);
  358. /*
  359.  * Custom object writing 
  360.  */
  361. QD3D_EXPORT TQ3Status Q3View_SubmitWriteData(
  362.     TQ3ViewObject        view,
  363.     TQ3Size                size,    
  364.     void                *data,
  365.     TQ3DataDeleteMethod    deleteData);
  366.  
  367. /******************************************************************************
  368.  **                                                                              **
  369.  **                                Primitives Routines                             **
  370.  **                                                                              **
  371.  *****************************************************************************/
  372.  
  373. QD3D_EXPORT TQ3Status Q3NewLine_Write(
  374.     TQ3FileObject        file);
  375.  
  376. QD3D_EXPORT TQ3Status Q3Uns8_Read(
  377.     TQ3Uns8                *data,
  378.     TQ3FileObject        file);
  379.  
  380. QD3D_EXPORT TQ3Status Q3Uns8_Write(
  381.     const TQ3Uns8        data,
  382.     TQ3FileObject        file);
  383.  
  384. QD3D_EXPORT TQ3Status Q3Uns16_Read(
  385.     TQ3Uns16                *data,
  386.     TQ3FileObject        file);
  387.  
  388. QD3D_EXPORT TQ3Status Q3Uns16_Write(
  389.     const TQ3Uns16        data,
  390.     TQ3FileObject        file);
  391.  
  392. QD3D_EXPORT TQ3Status Q3Uns32_Read(
  393.     TQ3Uns32                *data,
  394.     TQ3FileObject        file);
  395.         
  396. QD3D_EXPORT TQ3Status Q3Uns32_Write(
  397.     const TQ3Uns32        data,
  398.     TQ3FileObject        file);
  399.  
  400. QD3D_EXPORT TQ3Status Q3Int32_Read(
  401.     TQ3Int32            *data,
  402.     TQ3FileObject        file);
  403.             
  404. QD3D_EXPORT TQ3Status Q3Int32_Write(
  405.     const TQ3Int32        data,
  406.     TQ3FileObject        file);
  407.             
  408. QD3D_EXPORT TQ3Status Q3Uns64_Read(
  409.     TQ3Uns64            *data,
  410.     TQ3FileObject        file);
  411.         
  412. QD3D_EXPORT TQ3Status Q3Uns64_Write(
  413.     const TQ3Uns64        data,
  414.     TQ3FileObject        file);
  415.  
  416. QD3D_EXPORT TQ3Status Q3Float32_Read(
  417.     TQ3Float32            *data,
  418.     TQ3FileObject        file);
  419.  
  420. QD3D_EXPORT TQ3Status Q3Float32_Write(
  421.     const TQ3Float32    data,
  422.     TQ3FileObject        file);
  423.  
  424. QD3D_EXPORT TQ3Status Q3Float64_Read(
  425.     TQ3Float64            *data,
  426.     TQ3FileObject        file);
  427.  
  428. QD3D_EXPORT TQ3Status Q3Float64_Write(
  429.     const TQ3Float64    data,
  430.     TQ3FileObject        file);
  431.  
  432. QD3D_EXPORT TQ3Size Q3Size_Pad(
  433.     TQ3Size                size);
  434.  
  435. /*
  436.  * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  437.  */
  438. QD3D_EXPORT TQ3Status Q3String_Read(
  439.     char                *data,
  440.     unsigned long        *length,
  441.     TQ3FileObject        file);
  442.  
  443. QD3D_EXPORT TQ3Status Q3String_Write(
  444.     const char            *data,
  445.     TQ3FileObject        file);
  446.  
  447. /* 
  448.  * This call will read Q3Size_Pad(size) bytes,
  449.  *    but only place size bytes into data.
  450.  */
  451. QD3D_EXPORT TQ3Status Q3RawData_Read(
  452.     unsigned char        *data,
  453.     unsigned long        size,
  454.     TQ3FileObject        file);
  455.  
  456. /* 
  457.  * This call will write Q3Size_Pad(size) bytes,
  458.  *    adding 0's to pad to the nearest 4 byte boundary.
  459.  */
  460. QD3D_EXPORT TQ3Status Q3RawData_Write(
  461.     const unsigned char    *data,
  462.     unsigned long        size,
  463.     TQ3FileObject        file);
  464.  
  465. /******************************************************************************
  466.  **                                                                              **
  467.  **                        Convenient Primitives Routines                         **
  468.  **                                                                              **
  469.  *****************************************************************************/
  470.  
  471. QD3D_EXPORT TQ3Status Q3Point2D_Read(
  472.     TQ3Point2D                    *point2D,
  473.     TQ3FileObject                file);
  474.  
  475. QD3D_EXPORT TQ3Status Q3Point2D_Write(
  476.     const TQ3Point2D            *point2D,
  477.     TQ3FileObject                file);
  478.  
  479. QD3D_EXPORT TQ3Status Q3Point3D_Read(
  480.     TQ3Point3D                    *point3D,
  481.     TQ3FileObject                file);
  482.  
  483. QD3D_EXPORT TQ3Status Q3Point3D_Write(
  484.     const TQ3Point3D            *point3D,
  485.     TQ3FileObject                file);
  486.     
  487. QD3D_EXPORT TQ3Status Q3RationalPoint3D_Read(
  488.     TQ3RationalPoint3D            *point3D,
  489.     TQ3FileObject                file);
  490.  
  491. QD3D_EXPORT TQ3Status Q3RationalPoint3D_Write(
  492.     const TQ3RationalPoint3D    *point3D,
  493.     TQ3FileObject                file);
  494.  
  495. QD3D_EXPORT TQ3Status Q3RationalPoint4D_Read(
  496.     TQ3RationalPoint4D            *point4D,
  497.     TQ3FileObject                file);
  498.  
  499. QD3D_EXPORT TQ3Status Q3RationalPoint4D_Write(
  500.     const TQ3RationalPoint4D    *point4D,
  501.     TQ3FileObject                file);
  502.  
  503. QD3D_EXPORT TQ3Status Q3Vector2D_Read(
  504.     TQ3Vector2D                    *vector2D,
  505.     TQ3FileObject                file);
  506.  
  507. QD3D_EXPORT TQ3Status Q3Vector2D_Write(
  508.     const TQ3Vector2D            *vector2D,
  509.     TQ3FileObject                file);
  510.  
  511. QD3D_EXPORT TQ3Status Q3Vector3D_Read(
  512.     TQ3Vector3D                    *vector3D,
  513.     TQ3FileObject                file);
  514.  
  515. QD3D_EXPORT TQ3Status Q3Vector3D_Write(
  516.     const TQ3Vector3D            *vector3D,
  517.     TQ3FileObject                file);
  518.  
  519. QD3D_EXPORT TQ3Status Q3Matrix4x4_Read(
  520.     TQ3Matrix4x4                *matrix4x4,
  521.     TQ3FileObject                file);
  522.  
  523. QD3D_EXPORT TQ3Status Q3Matrix4x4_Write(
  524.     const TQ3Matrix4x4            *matrix4x4,
  525.     TQ3FileObject                file);
  526.  
  527. QD3D_EXPORT TQ3Status Q3Tangent2D_Read(
  528.     TQ3Tangent2D                *tangent2D,
  529.     TQ3FileObject                file);
  530.  
  531. QD3D_EXPORT TQ3Status Q3Tangent2D_Write(
  532.     const TQ3Tangent2D            *tangent2D,
  533.     TQ3FileObject                file);
  534.  
  535. QD3D_EXPORT TQ3Status Q3Tangent3D_Read(
  536.     TQ3Tangent3D                *tangent3D,
  537.     TQ3FileObject                file);
  538.  
  539. QD3D_EXPORT TQ3Status Q3Tangent3D_Write(
  540.     const TQ3Tangent3D            *tangent3D,
  541.     TQ3FileObject                file);
  542.  
  543. /*    This call affects only text Files - it is a no-op in binary files */
  544.  
  545. QD3D_EXPORT TQ3Status Q3Comment_Write(
  546.     char                        *comment,
  547.     TQ3FileObject                file);
  548.  
  549. /******************************************************************************
  550.  **                                                                              **
  551.  **                                Unknown Object                                 **
  552.  **                                                                              **
  553.  **        Unknown objects are generated when reading files which contain         **
  554.  **        custom data which has not been registered in the current             **
  555.  **        instantiation of QuickDraw 3D.                                         **
  556.  **                                                                              **
  557.  *****************************************************************************/
  558.  
  559. QD3D_EXPORT TQ3ObjectType Q3Unknown_GetType(
  560.     TQ3UnknownObject        unknownObject);
  561.  
  562. QD3D_EXPORT TQ3Status Q3Unknown_GetDirtyState(
  563.     TQ3UnknownObject        unknownObject,
  564.     TQ3Boolean                *isDirty);
  565.  
  566. QD3D_EXPORT TQ3Status Q3Unknown_SetDirtyState(
  567.     TQ3UnknownObject        unknownObject,
  568.     TQ3Boolean                isDirty);
  569.  
  570.  
  571. /******************************************************************************
  572.  **                                                                              **
  573.  **                            Unknown Text Routines                             **
  574.  **                                                                              **
  575.  *****************************************************************************/
  576.  
  577. typedef struct TQ3UnknownTextData {
  578.     char                    *objectName;    /* '\0' terminated */
  579.     char                    *contents;        /* '\0' terminated */
  580. } TQ3UnknownTextData;
  581.  
  582. QD3D_EXPORT TQ3Status Q3UnknownText_GetData(
  583.     TQ3UnknownObject        unknownObject,
  584.     TQ3UnknownTextData        *unknownTextData);
  585.  
  586. QD3D_EXPORT TQ3Status Q3UnknownText_EmptyData(
  587.     TQ3UnknownTextData        *unknownTextData);
  588.  
  589.  
  590. /******************************************************************************
  591.  **                                                                              **
  592.  **                            Unknown Binary Routines                             **
  593.  **                                                                              **
  594.  *****************************************************************************/
  595.  
  596. typedef struct TQ3UnknownBinaryData {
  597.     TQ3ObjectType            objectType;
  598.     unsigned long            size;
  599.     TQ3Endian                byteOrder;
  600.     char                    *contents;
  601. } TQ3UnknownBinaryData;
  602.  
  603. QD3D_EXPORT TQ3Status Q3UnknownBinary_GetData(
  604.     TQ3UnknownObject        unknownObject,
  605.     TQ3UnknownBinaryData    *unknownBinaryData);
  606.  
  607. QD3D_EXPORT TQ3Status Q3UnknownBinary_EmptyData(
  608.     TQ3UnknownBinaryData    *unknownBinaryData);
  609.  
  610.  
  611. /******************************************************************************
  612.  **                                                                              **
  613.  **                            ViewHints routines                                 **
  614.  **                                                                              **
  615.  **        ViewHints are an object in a metafile to give you some hints on how     **
  616.  **        to render a scene.    You may create a view with any of the objects     **
  617.  **        retrieved from it, or you can just throw it away.                     **
  618.  **                                                                              **
  619.  **        To write a view hints to a file, create a view hints object from a     **
  620.  **        view and write the view hints.                                         **
  621.  **                                                                              **
  622.  *****************************************************************************/
  623.  
  624. QD3D_EXPORT TQ3ViewHintsObject Q3ViewHints_New(
  625.     TQ3ViewObject            view);
  626.  
  627. QD3D_EXPORT TQ3Status Q3ViewHints_SetRenderer(
  628.     TQ3ViewHintsObject        viewHints,
  629.     TQ3RendererObject        renderer);
  630.  
  631. QD3D_EXPORT TQ3Status Q3ViewHints_GetRenderer(
  632.     TQ3ViewHintsObject        viewHints,
  633.     TQ3RendererObject        *renderer);
  634.  
  635. QD3D_EXPORT TQ3Status Q3ViewHints_SetCamera(
  636.     TQ3ViewHintsObject        viewHints,
  637.     TQ3CameraObject            camera);
  638.  
  639. QD3D_EXPORT TQ3Status Q3ViewHints_GetCamera(
  640.     TQ3ViewHintsObject        viewHints,
  641.     TQ3CameraObject            *camera);
  642.  
  643. QD3D_EXPORT TQ3Status Q3ViewHints_SetLightGroup(
  644.     TQ3ViewHintsObject        viewHints,
  645.     TQ3GroupObject            lightGroup);
  646.  
  647. QD3D_EXPORT TQ3Status Q3ViewHints_GetLightGroup(
  648.     TQ3ViewHintsObject        viewHints,
  649.     TQ3GroupObject            *lightGroup);
  650.  
  651. QD3D_EXPORT TQ3Status Q3ViewHints_SetAttributeSet(
  652.     TQ3ViewHintsObject        viewHints,
  653.     TQ3AttributeSet            attributeSet);
  654.  
  655. QD3D_EXPORT TQ3Status Q3ViewHints_GetAttributeSet(
  656.     TQ3ViewHintsObject        viewHints,
  657.     TQ3AttributeSet            *attributeSet);
  658.  
  659. QD3D_EXPORT TQ3Status Q3ViewHints_SetDimensionsState(
  660.     TQ3ViewHintsObject        viewHints,
  661.     TQ3Boolean                isValid);
  662.     
  663. QD3D_EXPORT TQ3Status Q3ViewHints_GetDimensionsState(
  664.     TQ3ViewHintsObject        viewHints,
  665.     TQ3Boolean                *isValid);
  666.  
  667. QD3D_EXPORT TQ3Status Q3ViewHints_SetDimensions(
  668.     TQ3ViewHintsObject        viewHints,
  669.     unsigned long            width,
  670.     unsigned long            height);
  671.  
  672. QD3D_EXPORT TQ3Status Q3ViewHints_GetDimensions(
  673.     TQ3ViewHintsObject        viewHints,
  674.     unsigned long            *width,
  675.     unsigned long            *height);
  676.  
  677. QD3D_EXPORT TQ3Status Q3ViewHints_SetMaskState(
  678.     TQ3ViewHintsObject        viewHints,
  679.     TQ3Boolean                isValid);
  680.  
  681. QD3D_EXPORT TQ3Status Q3ViewHints_GetMaskState(
  682.     TQ3ViewHintsObject        viewHints,
  683.     TQ3Boolean                *isValid);
  684.  
  685. QD3D_EXPORT TQ3Status Q3ViewHints_SetMask(    
  686.     TQ3ViewHintsObject        viewHints,
  687.     const TQ3Bitmap            *mask);
  688.  
  689. QD3D_EXPORT TQ3Status Q3ViewHints_GetMask(    
  690.     TQ3ViewHintsObject        viewHints,
  691.     TQ3Bitmap                *mask);
  692.  
  693. /* Call Q3Bitmap_Empty when done with the mask    */
  694.  
  695. QD3D_EXPORT TQ3Status Q3ViewHints_SetClearImageMethod(
  696.     TQ3ViewHintsObject                viewHints,
  697.     TQ3DrawContextClearImageMethod    clearMethod);
  698.  
  699. QD3D_EXPORT TQ3Status Q3ViewHints_GetClearImageMethod(
  700.     TQ3ViewHintsObject                viewHints,
  701.     TQ3DrawContextClearImageMethod    *clearMethod);
  702.  
  703. QD3D_EXPORT TQ3Status Q3ViewHints_SetClearImageColor(
  704.     TQ3ViewHintsObject        viewHints,
  705.     const TQ3ColorARGB         *color);
  706.  
  707. QD3D_EXPORT TQ3Status Q3ViewHints_GetClearImageColor(
  708.     TQ3ViewHintsObject        viewHints,
  709.     TQ3ColorARGB             *color);
  710.  
  711. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  712.  
  713. QD3D_EXPORT TQ3Status Q3ViewHints_SetBackgroundShader(
  714.     TQ3ViewHintsObject        viewHints,
  715.     TQ3ShaderObject            backgroundShader);
  716.  
  717. QD3D_EXPORT TQ3Status Q3ViewHints_GetBackgroundShader(
  718.     TQ3ViewHintsObject        viewHints,
  719.     TQ3ShaderObject            *backgroundShader);
  720.  
  721. QD3D_EXPORT TQ3Status Q3ViewHints_SetAtmosphericShader(
  722.     TQ3ViewHintsObject        viewHints,
  723.     TQ3ShaderObject            atmospheric);
  724.  
  725. QD3D_EXPORT TQ3Status Q3ViewHints_GetAtmosphericShader(
  726.     TQ3ViewHintsObject        viewHints,
  727.     TQ3ShaderObject            *atmospheric);
  728.  
  729. #endif    /*  ESCHER_VER_15  */
  730.  
  731. #ifdef __cplusplus
  732. }
  733. #endif    /* __cplusplus */
  734.  
  735. #if defined(__MWERKS__)
  736.     #pragma enumsalwaysint reset
  737. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  738.     #pragma options enum=reset
  739. #endif
  740.  
  741. #endif /* QD3DIO_h */
  742.